package edu.gdpu.memory.direct;

import java.nio.ByteBuffer;
import java.util.ArrayList;

/**
 * @author mazebin
 * @date 2021年 07月15日 16:04:54
 * 演示直接内存溢出
 */
public class DirectMemoryTest2 {
    static final int _100Mb = 1024 * 1024 * 1024;

    public static void main(String[] args) {
        ArrayList<ByteBuffer> byteBuffers = new ArrayList<>();
        int i=0;
        try{
            while (true){
                //并没有真正调用操作系统申请分配内存，只是通过计算得知内存无法分配，于是手动抛出异常
                ByteBuffer byteBuffer = ByteBuffer.allocateDirect(_100Mb);
                byteBuffers.add(byteBuffer);
                i++;
            }
        }finally {
            System.out.println(i);
        }
        // 方法区是jvm规范， jdk6 中对方法区的实现称为永久代
        //                  jdk8 对方法区的实现称为元空间
        //输入
        //java.lang.OutOfMemoryError: Direct buffer memory
    }
}
